OpenCV(Python)のJPEG圧縮品質(quality)は必ず整数にすること!

您所在的位置:网站首页 opencv opencv-python OpenCV(Python)のJPEG圧縮品質(quality)は必ず整数にすること!

OpenCV(Python)のJPEG圧縮品質(quality)は必ず整数にすること!

#OpenCV(Python)のJPEG圧縮品質(quality)は必ず整数にすること!| 来源: 网络整理| 查看: 265

しないとこうなります

cv2.imwrite関数の場合

imwrite.py #importとかは省略 cv2.imwrite("cannot_write.jpg",img,77.7) #圧縮率が小数だと… cv2.error: OpenCV(4.7.0) :-1: error: (-5:Bad argument) in function 'imwrite' > Overload resolution failed: > - Can't parse 'params'. Input argument doesn't provide sequence protocol > - Can't parse 'params'. Input argument doesn't provide sequence protocol

cv2.imencode関数の場合

imencode.py ret,encoded=cv2.imencode(".jpg",img,(cv2.IMWRITE_JPEG_QUALITY,77.7)) decoded=cv2.imdecode(encoded,flags=cv2.IMREAD_COLOR) cv2.error: OpenCV(4.5.5) :-1: error: (-5:Bad argument) in function 'imencode' > Overload resolution failed: > - Can't parse 'params'. Sequence item with index 1 has a wrong type > - Can't parse 'params'. Sequence item with index 1 has a wrong type

はい、以上。 気を付けましょう!

もうちょっと補足

まあ言いたいことはこれだけなんでこのまますっぱり終ってもいいんですが… さすがにちょっと雑すぎるのでもうちょっと補足しておきます

opencv-python-4.5.3.56までは確かに(浮動)小数も受け付けてくれたはずなのですが、opencv-python-4.5.4.58では唐突に整数じゃないとエラーを吐くようになりました(マイナーアップグレードでいきなりdeplicatedは普通ないはずなんでバグでしょうか?)。 今回は圧縮結果をファイルに書き出さずメモリに置くimencode関数で検証しましたが、cv2.imwriteでもだいたい同じ結果になります(ドキュメントを見る限り共通のパラメータ使ってるみたいなので)。 …まあ、この手のパラメータは大体の人が整数を入れるので問題ないとは思いますが、今まで動いてたものが突然動かなくなった!みたいなことが無きにしも非ずなので気を付けましょう。 あ、ちなみに最近のPython(具体的には3.10以降?)にはopencv4.5.3は入らないみたいなので、直すべきはバージョンではありません。横着せずに必ずコードの方を整数に直してくださいね!

以上、今度こそ終わり!

for foreigners

You must set OpenCV's JPEG-quality is Integer!!!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3